package pe.gob.pj.sri.web.action;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.richfaces.component.html.HtmlDataTable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import pe.gob.pj.sri.bean.Ticket;
import pe.gob.pj.sri.bean.Ticket_Usuario;
import pe.gob.pj.sri.bean.Usuario;
import pe.gob.pj.sri.servicio.Ticket_UsuarioService;
import pe.gob.pj.sri.servicio.UsuarioService;

import pe.gob.pj.sri.web.util.Constantes;

import pe.gob.pj.sri.servicio.TicketService;


@Scope("session")
@Controller("usuarioAction")
public class UsuarioAction {

	@Autowired
    private static final Logger LOGGER = Logger.getLogger(UsuarioAction.class);
	@Autowired
	private UsuarioService usuario_service;
	@Autowired
	private TicketService ticket_service;
	
	@Autowired
	private Ticket_UsuarioService ticket_usuario_service;
	
	@Autowired
	private Usuario user;
	@Autowired
	private TicketAction ticket_action;
	

	private List<Usuario> lista_analistas;
	private HtmlDataTable radioDataTable;
	private Usuario dataItem; 
	private List<Usuario> lista_analistas_seleccionados;
	private String cargo; // analista desarrollador o analista de testing

	public TicketAction getTicket_action() {
		return ticket_action;
	}


	public void setTicket_action(TicketAction ticket_action) {
		this.ticket_action = ticket_action;
	}

	
	public List<Usuario> getLista_analistas_seleccionados() {
		return lista_analistas_seleccionados;
	}


	public void setLista_analistas_seleccionados(
			List<Usuario> lista_analistas_seleccionados) {
		this.lista_analistas_seleccionados = lista_analistas_seleccionados;
	}

	public UsuarioAction() {
		this.lista_analistas = new ArrayList<Usuario>();
		this.lista_analistas_seleccionados = new ArrayList<Usuario>();
	}
	
	
	public UsuarioService getUsuario_service() {
		return usuario_service;
	}

	public void setUsuario_service(UsuarioService usuario_service) {
		this.usuario_service = usuario_service;
	}

	public Usuario getUser() {
		return user;
	}

	public void setUser(Usuario user) {
		this.user = user;
	}

	public String getCargo() {
		return cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public List<Usuario> getLista_analistas() {
		return lista_analistas;
	}

	public void setLista_analistas(List<Usuario> lista_analistas) {
		this.lista_analistas = lista_analistas;
	}

	public HtmlDataTable getRadioDataTable() {
		return radioDataTable;
	}

	public void setRadioDataTable(HtmlDataTable radioDataTable) {
		this.radioDataTable = radioDataTable;
	}

	public Usuario getDataItem() {
		return dataItem;
	}

	public void setDataItem(Usuario dataItem) {
		this.dataItem = dataItem;
	}
  
	public static Logger getLogger() {
		return LOGGER;
	}
	
	public String getRecuperar_usuarios(){
		try {
			lista_analistas.clear();
			lista_analistas = usuario_service.listarAanalistas("car3");
			
		} catch (Exception e) {
			System.out.println("Error");
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "";
	}
	
	public String getIniciar_asignar_ticket(){
		
		//getRecuperar_usuarios();
		//this.ticket_action.obtener_listas_tickets_no_asignados();
		
		return Constantes.VACIO;
		
	}
	
	public void establecerElementoSeleccionado(){
		try{
			System.out.print("establecerElementoSeleccionado: ");
			dataItem = null;
			
			dataItem = (Usuario)radioDataTable.getRowData();
			
			int i=0;
			if((i=this.lista_analistas_seleccionados.indexOf(dataItem))!=-1){
				this.lista_analistas_seleccionados.remove(i);
				System.out.println(dataItem.getApellidoPaterno()+" existe, se quita de la lista");
			}else{
				this.lista_analistas_seleccionados.add(dataItem);
				System.out.println(dataItem.getApellidoPaterno()+", se agregó");
			}
		}catch(Exception e){
			LOGGER.error("Error =>");
		}
	}
	
	public String registrar(){
		// HACER LA COMPROBACION CON UN MENSAJE
		
		registrarTicket();
		asignarTicket();
		
		return "correcto";
	}
	
	public void asignarTicket(){
		// JOAN HACER
		Ticket ticket= this.ticket_action.getTicket();
		boolean cambioEstadoTicket=false;
		for(int i=0; i<this.lista_analistas_seleccionados.size(); i++){
			//System.out.println(this.lista_analistas_seleccionados.get(i).getApellidoMaterno());
			Ticket_Usuario ticket_usuario=new Ticket_Usuario();
			ticket_usuario.setIdTicket(ticket.getIdTicket());
			ticket_usuario.setIdUsuario(this.lista_analistas_seleccionados.get(i).getIdUsuario());
			if(ticket_usuario_service.registrarTicket_Usuario(ticket_usuario))
				System.out.println("Registrado Usuario: "+this.lista_analistas_seleccionados.get(i).getIdUsuario()+" a Ticket: "+ticket.getIdTicket());
			if(!cambioEstadoTicket)
			{
				cambioEstadoTicket=true;
				ticket.setEstado(20);
				if(ticket_service.modificarTicket(ticket))
					System.out.println("Actualizo correctamente el ticket");
			}
			
		} 
	}
	
	public void registrarTicket(){
		System.out.println("Registrar Ticket");
		Ticket ticket= this.ticket_action.getTicket();
		if(ticket_service.registrarTicket(ticket))
			System.out.println("Mostrando mensaje de confirmacion de TicketRegistrado");
		System.out.println("Descripcion: "+ticket.getDescripcionLarga());
		System.out.println();
		// registrar ticket en la base de datos
	}
}
